﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sinacor.Servico.Bovespa.Cliente.Service.ServiceImplementation.Translator.DataContractToBusinessEntity
{
    /// <summary>
    /// Tradutor de Tipo de Conta
    /// </summary>
    public class TipoConta
    {
        #region Métodos
        /// <summary>
        /// Traduz de DataContract.Request.FiltroCodigoClienteRequest para BusinessEntity.Parameter.FiltroCodigoCliente
        /// </summary>
        /// <param name="from">DataContract.Request.FiltroCodigoClienteRequest</param>
        /// <returns>BusinessEntity.Parameter.FiltroCodigoCliente</returns>
        public BusinessEntity.Parameter.FiltroCodigoCliente ToFiltroCodigoCliente(DataContract.Request.FiltroCodigoClienteRequest from) 
        {
            BusinessEntity.Parameter.FiltroCodigoCliente to = new BusinessEntity.Parameter.FiltroCodigoCliente();
            to.Codigo = from.Codigo;
            return to;
        }
        /// <summary>
        /// Traduz de Lista de DataContract.Request.FiltroCodigoClienteRequest para Lista BusinessEntity.Parameter.FiltroCodigoCliente
        /// </summary>
        /// <param name="from">Lista de DataContract.Request.FiltroCodigoClienteRequest</param>
        /// <returns>Lista BusinessEntity.Parameter.FiltroCodigoCliente</returns>
        public List<BusinessEntity.Parameter.FiltroCodigoCliente> ToFiltroCodigoCliente(List<DataContract.Request.FiltroCodigoClienteRequest> from) 
        {
            List<BusinessEntity.Parameter.FiltroCodigoCliente> to = new List<BusinessEntity.Parameter.FiltroCodigoCliente>();
            foreach (DataContract.Request.FiltroCodigoClienteRequest filtroCodigoClienteRequest in from)
                to.Add(ToFiltroCodigoCliente(filtroCodigoClienteRequest));

            return to;
        }

        /// <summary>
        /// Traduz de DataContract.Request.FiltroTipoContaRequest para BusinessEntity.Parameter.FiltroTipoConta
        /// </summary>
        /// <param name="from">DataContract.Request.FiltroTipoContaRequest</param>
        /// <returns>BusinessEntity.Parameter.FiltroTipoConta</returns>
        public BusinessEntity.Parameter.FiltroTipoConta ToFiltroTipoConta(DataContract.Request.FiltroTipoContaRequest from) 
        {
            BusinessEntity.Parameter.FiltroTipoConta to = new BusinessEntity.Parameter.FiltroTipoConta();
            to.ApelidoCliente = from.ApelidoCliente;
            to.CodigoCliente = from.CodigoCliente;
            to.Especialista = from.Especialista;
            if (from.TipoCliente != null)
            {
                switch (from.TipoCliente.Value)
                {
                    case DataContract.Enum.TipoCliente.AdministradoConcorrente:
                        to.TipoCliente = BusinessEntity.Enum.TipoCliente.AdministradoConcorrente;
                        break;
                    case DataContract.Enum.TipoCliente.CarteiraPropria:
                        to.TipoCliente = BusinessEntity.Enum.TipoCliente.CarteiraPropria;
                        break;
                    case DataContract.Enum.TipoCliente.ContaErro:
                        to.TipoCliente = BusinessEntity.Enum.TipoCliente.ContaErro;
                        break;
                    default:
                        break;
                }
            }

            return to;
        }

        /// <summary>
        /// Traduz de DataContract.Request.TipoContaRequest para BusinessEntity.TipoConta
        /// </summary>
        /// <param name="from">DataContract.Request.TipoContaRequest</param>
        /// <returns>BusinessEntity.TipoConta</returns>
        public BusinessEntity.TipoConta ToTipoConta(DataContract.Request.TipoContaRequest from) 
        {
            BusinessEntity.TipoConta to = new BusinessEntity.TipoConta();
            to.ApelidoCliente = from.ApelidoCliente;
            to.CodigoCliente = from.CodigoCliente;
            to.Especialista = from.Especialista;
            if (from.TipoCliente != null)
            {
                switch (from.TipoCliente.Value)
                {
                    case DataContract.Enum.TipoCliente.AdministradoConcorrente:
                        to.TipoCliente = BusinessEntity.Enum.TipoCliente.AdministradoConcorrente;
                        break;
                    case DataContract.Enum.TipoCliente.CarteiraPropria:
                        to.TipoCliente = BusinessEntity.Enum.TipoCliente.CarteiraPropria;
                        break;
                    case DataContract.Enum.TipoCliente.ContaErro:
                        to.TipoCliente = BusinessEntity.Enum.TipoCliente.ContaErro;
                        break;
                    default:
                        break;
                }
            }

            return to;
        }

        /// <summary>
        /// Traduz de Lista de DataContract.Request.TipoContaRequest para Lista de BusinessEntity.TipoConta
        /// </summary>
        /// <param name="from">Lista de DataContract.Request.TipoContaRequest</param>
        /// <returns>Lista de BusinessEntity.TipoConta</returns>
        public List<BusinessEntity.TipoConta> ToTipoConta(List<DataContract.Request.TipoContaRequest> from) 
        {
            List<BusinessEntity.TipoConta> to = new List<BusinessEntity.TipoConta>();
            foreach (DataContract.Request.TipoContaRequest tipoContaRequest in from)
                to.Add(ToTipoConta(tipoContaRequest));

            return to;
        }
        #endregion
    }
}
